import {resolve} from "path";
import vue from "@vitejs/plugin-vue";
import {defineConfig, PluginOption, loadEnv} from "vite";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import VueDevTools from "vite-plugin-vue-devtools";
import {ElementPlusResolver} from "unplugin-vue-components/resolvers";

// https://vite.dev/config/
export default defineConfig({
    // 插件
    plugins: [vitePlugin()],
    // 路径配置
    resolve: {
        // 配置路径别名
        alias: {
            "@": resolve(__dirname, "./src")
        }
    },
    // 开发服务器配置
    server: {
        // 监听端口
        port: 3000,
        // 是否自动打开浏览器
        open: false,
        // 热更新配置
        hmr: {
            // 通信协议（ws：普通 WebSocket（默认值）；wss：加密 WebSocket（用于 HTTPS 环境））
            protocol: "ws",
            // 连接主机
            host: "localhost",
            // 连接端口
            port: 3000,
            // 禁用错误覆盖层（false：完全禁用错误遮罩；true：显示错误遮罩）
            overlay: true
        },
        // 中间件模式（SSR 常用）
        middlewareMode: false,
        // 预构建选项
        preTransformRequests: true,
        // 是否开启代理
        proxy: {
            "/ai-server": {
                target: "https://ipapi-test.caihong77.com",
                changeOrigin: true,
                rewrite: (path) => path
            }
        }
    }
});

// vite插件方法
function vitePlugin(): PluginOption
{
    return [
        // 引入vue文件
        vue(),
        VueDevTools(),
        // 自动导入API
        AutoImport({
            // 自动导入 Vue 相关函数
            imports: ["vue", "vue-router", "pinia", {"vue-i18n": ["useI18n"]}],
            include: [
                /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
                /\.vue$/,
                /\.vue\?vue/ // .vue
            ],
            dirs: ["src/api", "src/common", "src/utils", "src/store/modules"],
            dts: "src/types/auto-imports.d.ts",
            resolvers: [ElementPlusResolver()]
        }),
        // 自动导入组件
        Components({
            // 指定组件目录
            dirs: ["src/components"],
            // 生成类型声明文件
            dts: "src/types/components.d.ts",
            // 自动导入扩展名
            extensions: ["vue", "tsx"],
            // 深度扫描子目录
            deep: true,
            // 允许子目录作为组件的命名空间前缀
            directoryAsNamespace: false,
            // 自动导入 Element Plus 相关组件
            resolvers: [ElementPlusResolver()]
        })
    ];
}
